package com.aaa.controller;

import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import com.aaa.entity.MyReturn;
import com.aaa.util.Constants;
import com.aaa.util.ResultStatusEnum;

import java.util.HashMap;
import java.util.Map;

/**
 * @author ：dudu（12232347710@qq.com）
 * @date ：Created in 2022/6/23 15:49
 * @description：
 * @modified By：
 */
public class BaseController {
    public MyReturn getSuccessResult(MyReturn myReturn){
        myReturn.setCode(ResultStatusEnum.SUCCESS.getCode());
        myReturn.setMsg(ResultStatusEnum.SUCCESS.getMsg());
        return  myReturn;

    }
    /**
     * @create by: Teacher陈
     * @description: 传入一个原始返回对象，得到一个失败的返回对象
     * @create time: 2020/9/17 9:39
     * @param myReturn
     * @return MyResult
     */
    public MyReturn getFailResult(MyReturn myReturn){
        myReturn.setCode(ResultStatusEnum.FAILE.getCode());
        myReturn.setMsg(ResultStatusEnum.FAILE.getMsg());
        return  myReturn;
    }
    public MyReturn getLoginFailResult(MyReturn myReturn) {
        myReturn.setCode(ResultStatusEnum.FAILE.getCode());
        myReturn.setMsg(Constants.ERROR_LOGIN);
        return myReturn;
    }
    /**
     * @param password
     * @return newPassword
     * @create by: Teacher陈（86521760@qq.com）
     * @description: 密码加密
     * @create time: 2022/6/6 9:53
     */
    public static String makePassword(String password) {
        String md5 = SecureUtil.md5(password);
        return md5;
    }
    /* */

    /**
     * @param password  明文密码
     * @return map  返回封装了加密之后的密码和盐值
     * @create by: Teacher陈（86521760@qq.com）
     * @description: 密码加盐加密
     * @create time: 2022/6/6 9:53
     */
    public static Map<String, String> makePasswordSalt(String password) {
        Map<String, String> map = new HashMap<>();
        //随机生成密钥（盐值）
//        byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
        byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
        //将盐值转化格式（方便数据保存），byte数组转成字符串
        String salt = Base64.encode(key);
        //构建加密对象
        SymmetricCrypto aes = null;
        aes = new SymmetricCrypto(SymmetricAlgorithm.AES, Base64.decode(salt));
        //加密为16进制表示
        String s = aes.encryptHex(password);
        //加密之后的密文
        map.put("password",s);
        map.put("salt",salt);
        return map;
    }
    /**
     * @param1 password  明文密码
     * @param2 salt  盐值
     * @return string 密文
     * @create by: Teacher陈（86521760@qq.com）
     * @description: 密码加盐加密
     * @create time: 2022/6/6 9:53
     */
    public static String makePasswordSalt(String password,String salt) {
        //构建
        SymmetricCrypto aes = null;
        aes = new SymmetricCrypto(SymmetricAlgorithm.AES, Base64.decode(salt));
        //加密为16进制表示
        String encryptHex = aes.encryptHex(password);
        return encryptHex;
    }
}
